/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import com.itextpdf.text.DocumentException;
import ejb.dao.estagio.Alerta;
import ejb.dao.estagio.Concedente;
import ejb.dao.estagio.Curso;
import ejb.dao.estagio.Estagio;
import ejb.dao.relatorios.FichaFrequencia;
import ejb.dao.relatorios.RelatorioAtividades;
import ejb.dao.usuarios.Estagiario;
import ejb.dao.usuarios.Orientador;
import ejb.dao.usuarios.Supervisor;
import ejb.metodos.SessionBeanLocal;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Gomes
 */
public class TesteServlet extends HttpServlet {

    @EJB(mappedName = "SessionBeanEJB")
    private SessionBeanLocal sessionBean;
    HttpSession sessao = null;
    int contadorEstagiosEmEspera = 0;

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, ParseException, DocumentException {
        String jsp = null;
        if (request.getRequestURI().endsWith("/login")) {
            String login = request.getParameter("login");
            String senha = request.getParameter("senha");
            String tipoUsuario = sessionBean.login(login, senha);
            if (tipoUsuario != null) {
                sessao = request.getSession(true);
                sessao.setAttribute("LOGIN", login);
                sessao.setAttribute("ACESSO", tipoUsuario);

                if (tipoUsuario.equals("Estagiario")) {
                    Estagio estagio = sessionBean.buscarEstagio(login);
                    if (estagio != null) {
                        request.setAttribute("estado", "recuperar");
                        sessao.setAttribute("STATUS_ESTAGIO", estagio.getStatus());
                    } else {
                        sessao.setAttribute("STATUS_ESTAGIO", "Novo");
                    }
                } else if (tipoUsuario.equals("Orientador")) {
                    contadorEstagiosEmEspera = contadorEstagiosEmEspera = sessionBean.contarEstagiosEmEspera(login);
                    sessao.setAttribute("CONTADOR_ESTAGIOS_ESPERA", contadorEstagiosEmEspera);
                }
            } else {
                request.setAttribute("msgErro", "Login ou senha inválidos");
            }
            jsp = "/index.jsp";
        }
        if (request.getRequestURI().endsWith("/sair")) {
            sessao = request.getSession(false);
            if (sessao != null) {
                sessao.invalidate();
            }
            jsp = "/index.jsp";
        } else if (request.getRequestURI().endsWith("/cadastrarEstagiario")) {
            String login = request.getParameter("login");
            String senha = request.getParameter("senha");
            String nome = request.getParameter("nome");
            String undSetorial = request.getParameter("undSetorial");
            int semestre = Integer.parseInt(request.getParameter("semestre"));
            String rga = request.getParameter("rga");
            String cpf = request.getParameter("cpf");
            String rg = request.getParameter("rg");
            String orgaoExpedidor = request.getParameter("orgaoExpedidor");
            String nacionalidade = request.getParameter("nacionalidade");
            String rua = request.getParameter("rua");
            int nRua = Integer.parseInt(request.getParameter("nRua"));
            String bairro = request.getParameter("bairro");
            String cep = request.getParameter("cep");
            String cidade = request.getParameter("cidade");
            String uf = request.getParameter("uf");
            String telefone = request.getParameter("telefone");
            String telefoneRecado = request.getParameter("telefoneRecado");
            String email = request.getParameter("email");
            Curso curso = sessionBean.buscarCurso(Long.parseLong(request.getParameter("curso")));
            sessionBean.cadastrarEstagiario(login, senha, nome, curso, undSetorial, semestre, rga, cpf, rg, orgaoExpedidor, nacionalidade, rua, nRua, bairro, cep, cidade, uf, telefone, telefoneRecado, email, null);
            jsp = "/index.jsp";
        } else if (request.getRequestURI().endsWith("/cadastrarOrientador")) {
            String login = request.getParameter("login");
            String senha = request.getParameter("senha");
            String nome = request.getParameter("nome");
            Curso curso = sessionBean.buscarCurso(Long.parseLong(request.getParameter("curso")));
            sessionBean.cadastrarOrientador(login, senha, nome, curso);
            jsp = "/index.jsp";
        } else if (request.getRequestURI().endsWith("/cadastrarSupervisor")) {
            String login = request.getParameter("login");
            String senha = request.getParameter("senha");
            String nome = request.getParameter("nome");
            String cargo = request.getParameter("cargo");
            String formacao = request.getParameter("formacao");

            sessionBean.cadastrarSupervisor(login, senha, nome, cargo, formacao);
            jsp = "/index.jsp";
        } else if (request.getRequestURI().endsWith("/cadastrarEstagio")) {
            String loginEstagiario = (String) sessao.getAttribute("LOGIN");
            ArrayList<String> mat = new ArrayList<>();
            for (int i = 0; i < 7; i++) {
                if (request.getParameter("atividades" + String.valueOf(i + 1)).length() == 0) {//um campo não pode estar vazio, senao o stringtokenizer nao funciona direito
                    mat.add(" ");
                } else {
                    mat.add(request.getParameter("atividades" + (i + 1)));
                }
                mat.add(request.getParameter("jan" + (i + 1)));
                mat.add(request.getParameter("fev" + (i + 1)));
                mat.add(request.getParameter("mar" + (i + 1)));
                mat.add(request.getParameter("abr" + (i + 1)));
                mat.add(request.getParameter("mai" + (i + 1)));
                mat.add(request.getParameter("jun" + (i + 1)));
                mat.add(request.getParameter("jul" + (i + 1)));
                mat.add(request.getParameter("ago" + (i + 1)));
                mat.add(request.getParameter("set" + (i + 1)));
                mat.add(request.getParameter("out" + (i + 1)));
                mat.add(request.getParameter("nov" + (i + 1)));
                mat.add(request.getParameter("dez" + (i + 1)));
            }
            String cronograma = arrayToString(mat);

            mat = new ArrayList<>();
            double[] cargaHorariaDiaria = new double[]{0, 0, 0, 0, 0, 0};
            double cargaHorariaSemanal = 0;
            for (int i = 0; i < 16; i++) {
                if (request.getParameter("segunda" + (i + 1)).compareTo("estagio") == 0) {
                    cargaHorariaSemanal++;
                    cargaHorariaDiaria[0]++;
                }
                if (request.getParameter("terca" + (i + 1)).compareTo("estagio") == 0) {
                    cargaHorariaSemanal++;
                    cargaHorariaDiaria[1]++;
                }
                if (request.getParameter("quarta" + (i + 1)).compareTo("estagio") == 0) {
                    cargaHorariaSemanal++;
                    cargaHorariaDiaria[2]++;
                }
                if (request.getParameter("quinta" + (i + 1)).compareTo("estagio") == 0) {
                    cargaHorariaSemanal++;
                    cargaHorariaDiaria[3]++;
                }
                if (request.getParameter("sexta" + (i + 1)).compareTo("estagio") == 0) {
                    cargaHorariaSemanal++;
                    cargaHorariaDiaria[4]++;
                }
                if (request.getParameter("sabado" + (i + 1)).compareTo("estagio") == 0) {
                    cargaHorariaSemanal++;
                    cargaHorariaDiaria[5]++;
                }
                mat.add(request.getParameter("segunda" + (i + 1)));
                mat.add(request.getParameter("terca" + (i + 1)));
                mat.add(request.getParameter("quarta" + (i + 1)));
                mat.add(request.getParameter("quinta" + (i + 1)));
                mat.add(request.getParameter("sexta" + (i + 1)));
                mat.add(request.getParameter("sabado" + (i + 1)));
            }
            if (cargaHorariaDiaria[0] > 6) {
                request.setAttribute("msgErro", "Carga Horária da segunda-feira extrapolou o limite de 6h permitido!");
                jsp = "/recuperarEstagio";
            } else if (cargaHorariaDiaria[1] > 6) {
                request.setAttribute("msgErro", "Carga Horária da terça-feira extrapolou o limite de 6h permitido!");
                jsp = "/recuperarEstagio";
            } else if (cargaHorariaDiaria[2] > 6) {
                request.setAttribute("msgErro", "Carga Horária da quarta-feira extrapolou o limite de 6h permitido!");
                jsp = "/recuperarEstagio";
            } else if (cargaHorariaDiaria[3] > 6) {
                request.setAttribute("msgErro", "Carga Horária da quinta-feira extrapolou o limite de 6h permitido!");
                jsp = "/recuperarEstagio";
            } else if (cargaHorariaDiaria[4] > 6) {
                request.setAttribute("msgErro", "Carga Horária da sexta-feira extrapolou o limite de 6h permitido!");
                jsp = "/recuperarEstagio";
            } else if (cargaHorariaDiaria[5] > 6) {
                request.setAttribute("msgErro", "Carga Horária do sábado extrapolou o limite de 6h permitido!");
                jsp = "/recuperarEstagio";
            } else {
                String horarioEstagio = arrayToString(mat);
                boolean isObrigatorio = Boolean.parseBoolean(request.getParameter("isObrigatorio"));
                double valorBolsa = Double.parseDouble(request.getParameter("valorBolsa"));
                double valorTranporte = Double.parseDouble(request.getParameter("valorTransporte"));
                String numeroSeguro = request.getParameter("numeroSeguro");
                String empresaSeguro = request.getParameter("empresaSeguro");
                String tema = request.getParameter("tema");
                String area = request.getParameter("area");
                double cargaDiaria = Double.parseDouble(request.getParameter("cargaDiaria"));
                double cargaSemanal = cargaHorariaSemanal;
                double cargaTotal = Double.parseDouble(request.getParameter("cargaTotal"));
                String inicio = request.getParameter("inicio");
                String termino = request.getParameter("termino");
                String justificativa = request.getParameter("justificativa");
                String objetivo = request.getParameter("objetivo");
                String metodologia = request.getParameter("metodologia");
                Concedente concedente = salvarConcedente(request);
                Supervisor supervisor = salvarSupervisor(request);
                Orientador orientador = sessionBean.buscarOrientador(Long.parseLong(request.getParameter("orientador")));

                Estagiario estagiario = sessionBean.buscarEstagiario(loginEstagiario);
                Estagio estagio = sessionBean.buscarEstagio(estagiario.getEstagio().getId());
                if (estagio != null) {
                    sessionBean.updateEstagio(estagio, isObrigatorio, valorBolsa, valorTranporte, numeroSeguro, empresaSeguro, tema, area, cargaDiaria, cargaSemanal, cargaTotal, inicio, termino, justificativa, objetivo, metodologia, concedente, orientador, supervisor, cronograma, horarioEstagio);
                } else {
                    sessionBean.cadastrarEstagio(loginEstagiario, isObrigatorio, valorBolsa, valorTranporte, numeroSeguro, empresaSeguro, tema, area, cargaDiaria, cargaSemanal, cargaTotal, inicio, termino, justificativa, objetivo, metodologia, concedente, orientador, supervisor, cronograma, horarioEstagio);
                }
                request.setAttribute("estado", "recuperar");
                jsp = "/index.jsp";
            }
        } else if (request.getRequestURI().endsWith("/recuperarFichaFrequencia")) {
            String loginEstagiario = (String) sessao.getAttribute("LOGIN");
            Estagio estagio = sessionBean.buscarEstagiario(loginEstagiario).getEstagio();
            List<FichaFrequencia> fichaFrequencia = sessionBean.buscarFichaFrequencia(estagio.getId());
            if (fichaFrequencia.isEmpty()) {
                request.setAttribute("msgErro", "Login ou senha inválidos");
            } else {
                ArrayList<String> matriz = new ArrayList<>();
                StringTokenizer st = new StringTokenizer(fichaFrequencia.get(fichaFrequencia.size() - 1).getTabela(), "@");
                while (st.hasMoreTokens()) {
                    matriz.add(st.nextToken());
                }
                for (int i = matriz.size(); i < 80; i++) {
                    matriz.add("");
                }
                request.setAttribute("referenteAoMes", fichaFrequencia.get(0).getReferenteAoMes());
                request.setAttribute("tabela", matriz);
            }
            jsp = "/formularioFichaFrequencia.jsp";
        } else if (request.getRequestURI().endsWith("/criarAlerta")) {
            String dataAlerta = request.getParameter("dataAlerta");
            String descricao = request.getParameter("descricao");
            sessionBean.criarAlerta(dataAlerta, descricao);
            jsp = "/index.jsp";
        } else if (request.getRequestURI().endsWith("/recuperarEstagiario")) {
            String loginEstagiario = (String) sessao.getAttribute("LOGIN");
            Estagiario estagiario = sessionBean.buscarEstagiario(loginEstagiario);
            request.setAttribute("estagiario", estagiario);
            List<Curso> cursos = sessionBean.listarCursos();
            request.setAttribute("cursos", cursos);
            jsp = "/formularioEstagiario.jsp";
        } else if (request.getRequestURI().endsWith("/recuperarEstagio")) {
            String loginEstagiario = (String) sessao.getAttribute("LOGIN");
            Estagio estagio = sessionBean.buscarEstagiario(loginEstagiario).getEstagio();
            request.setAttribute("estagio", estagio);
            Curso curso = sessionBean.buscarEstagiario(loginEstagiario).getCurso();
            List<Orientador> orientadores = sessionBean.listarOrientadores(curso);
            request.setAttribute("orientadores", orientadores);
            ArrayList<String> matriz = new ArrayList<>();
            StringTokenizer st = new StringTokenizer(estagio.getCronograma(), "@");
            while (st.hasMoreTokens()) {
                matriz.add(st.nextToken());
            }
            request.setAttribute("cronograma", matriz);
            ArrayList<String> matriz2 = new ArrayList<>();
            st = new StringTokenizer(estagio.getHorarioEstagio(), "@");
            while (st.hasMoreTokens()) {
                matriz2.add(st.nextToken());
            }
            request.setAttribute("horarioEstagio", matriz2);
            jsp = "/formularioEstagio.jsp";
        } else if (request.getRequestURI().endsWith("/formularioEstagiario")) {
            List<Curso> cursos = sessionBean.listarCursos();
            request.setAttribute("cursos", cursos);
            jsp = "/formularioEstagiario.jsp";
        } else if (request.getRequestURI().endsWith("/formularioOrientador")) {
            List<Curso> cursos = sessionBean.listarCursos();
            request.setAttribute("cursos", cursos);
            jsp = "/formularioOrientador.jsp";
        } else if (request.getRequestURI().endsWith("/formularioEstagio")) {
            String loginEstagiario = (String) sessao.getAttribute("LOGIN");
            Curso curso = sessionBean.buscarEstagiario(loginEstagiario).getCurso();
            List<Orientador> orientadores = sessionBean.listarOrientadores(curso);
            request.setAttribute("orientadores", orientadores);
            jsp = "/formularioEstagio.jsp";
        } else if (request.getRequestURI().endsWith("/salvarAvaliacaoEstagiario")) {
            String loginEstagiario = (String) sessao.getAttribute("LOGIN");
            if (loginEstagiario != null) {

                int ai1 = Integer.parseInt(request.getParameter("ai1"));
                int ai2 = Integer.parseInt(request.getParameter("ai2"));
                int ai3 = Integer.parseInt(request.getParameter("ai3"));
                int ai4 = Integer.parseInt(request.getParameter("ai4"));

                int ap1 = Integer.parseInt(request.getParameter("ap1"));
                int ap2 = Integer.parseInt(request.getParameter("ap2"));
                int ap3 = Integer.parseInt(request.getParameter("ap3"));
                int ap4 = Integer.parseInt(request.getParameter("ap4"));
                int ap5 = Integer.parseInt(request.getParameter("ap5"));
                int ap6 = Integer.parseInt(request.getParameter("ap6"));

                int apt1 = Integer.parseInt(request.getParameter("apt1"));
                int apt2 = Integer.parseInt(request.getParameter("apt2"));
                int apt3 = Integer.parseInt(request.getParameter("apt3"));
                int apt4 = Integer.parseInt(request.getParameter("apt4"));
                int apt5 = Integer.parseInt(request.getParameter("apt5"));
                int apt6 = Integer.parseInt(request.getParameter("apt6"));
                String aproveitamento = request.getParameter("aproveitamento");
                String contribuicao = request.getParameter("contribuicao");
                String sugestoes = request.getParameter("sugestoes");
                sessionBean.salvarAvaliacaoEstagiario(loginEstagiario, ai1, ai2, ai3, ai4, ap1, ap2, ap3, ap4, ap5, ap6, apt1, apt2, apt3, apt4, apt5, apt6, aproveitamento, contribuicao, sugestoes);

            }
            jsp = "/index.jsp";
        } else if (request.getRequestURI().endsWith("/salvarAvaliacaoSupervisor")) {
            String loginEstagiario = (String) sessao.getAttribute("LOGIN");
            if (loginEstagiario != null) {

                int ai1 = Integer.parseInt(request.getParameter("ai1"));
                int ai2 = Integer.parseInt(request.getParameter("ai2"));
                int ai3 = Integer.parseInt(request.getParameter("ai3"));
                int ai4 = Integer.parseInt(request.getParameter("ai4"));

                int ap1 = Integer.parseInt(request.getParameter("ap1"));
                int ap2 = Integer.parseInt(request.getParameter("ap2"));
                int ap3 = Integer.parseInt(request.getParameter("ap3"));
                int ap4 = Integer.parseInt(request.getParameter("ap4"));
                int ap5 = Integer.parseInt(request.getParameter("ap5"));
                int ap6 = Integer.parseInt(request.getParameter("ap6"));

                int apt1 = Integer.parseInt(request.getParameter("apt1"));
                int apt2 = Integer.parseInt(request.getParameter("apt2"));
                int apt3 = Integer.parseInt(request.getParameter("apt3"));
                int apt4 = Integer.parseInt(request.getParameter("apt4"));
                int apt5 = Integer.parseInt(request.getParameter("apt5"));
                int apt6 = Integer.parseInt(request.getParameter("apt6"));
                String prosseguimento = request.getParameter("prosseguimento");
                String outrosEstagiarios = request.getParameter("outrosEstagiarios");
                String sugestoes = request.getParameter("sugestoes");
                sessionBean.salvarAvaliacaoSupervisor(loginEstagiario, ai1, ai2, ai3, ai4, ap1, ap2, ap3, ap4, ap5, ap6, apt1, apt2, apt3, apt4, apt5, apt6, prosseguimento, outrosEstagiarios, sugestoes);

            }
            jsp = "/index.jsp";
        } else if (request.getRequestURI().endsWith("/salvarRelatorioAtividades")) {
            String loginEstagiario = (String) sessao.getAttribute("LOGIN");
            boolean isFinal = Boolean.parseBoolean(request.getParameter("tipoRelatorio"));
            String periodoInicio = request.getParameter("periodoInicio");
            String periodoFim = request.getParameter("periodoFim");
            Double cargaHorariaAcumulada = Double.parseDouble(request.getParameter("cargaHorariaAcumulada"));
            String atividadesDesenvolvidas = request.getParameter("atividadesDesenvolvidas");
            int programaEstagio = Integer.parseInt(request.getParameter("programaEstagio"));
            String atividadesNaoIncluidasProgramaEstagio = request.getParameter("atividadesNaoIncluidasProgramaEstagio");
            String tarefasNaoContribuiram = request.getParameter("tarefasNaoContribuiram");
            String tarefasIndispensaveisNaoFeitas = request.getParameter("tarefasIndispensaveisNaoFeitas");
            int realidadeTrabalho = Integer.parseInt(request.getParameter("realidadeTrabalho"));
            int conhecimentosTeoricos = Integer.parseInt(request.getParameter("conhecimentosTeoricos"));
            boolean ambientacaoPessoas = Boolean.parseBoolean(request.getParameter("ambientacaoPessoas"));
            boolean temOrientadorTarefas = Boolean.parseBoolean(request.getParameter("temOrientadorTarefas"));
            String orientadorTarefas = request.getParameter("orientadorTarefas");
            boolean informacoesClaras = Boolean.parseBoolean("informacoesClaras");
            boolean informacoesDadas = Boolean.parseBoolean(request.getParameter("informacoesDadas"));
            String aQuemRecorria = request.getParameter("aQuemRecorria");
            int sentirDeficiencias = Integer.parseInt(request.getParameter("sentirDeficiencias"));
            String dificuldades = request.getParameter("dificuldades");
            boolean trocaExperiencia = Boolean.parseBoolean(request.getParameter("trocaExperiencia"));
            int solucoesProprias = Integer.parseInt(request.getParameter("solucoesProprias"));
            boolean trabalhosTeoricosPalestras = Boolean.parseBoolean("trabalhosTeoricosPalestras");
            String outrasObservacoes = request.getParameter("outrasObservacoes");
            sessionBean.salvarRelatorioAtividades(loginEstagiario, isFinal, periodoInicio, periodoFim, cargaHorariaAcumulada, atividadesDesenvolvidas, programaEstagio, atividadesNaoIncluidasProgramaEstagio, tarefasNaoContribuiram, tarefasIndispensaveisNaoFeitas, realidadeTrabalho, conhecimentosTeoricos, ambientacaoPessoas, temOrientadorTarefas, orientadorTarefas, informacoesClaras, informacoesDadas, aQuemRecorria, sentirDeficiencias, dificuldades, trocaExperiencia, solucoesProprias, trabalhosTeoricosPalestras, outrasObservacoes);
            jsp = "/index.jsp";
        } else if (request.getRequestURI().endsWith("/recuperarRelatorioAtividades")) {
            String loginEstagiario = (String) sessao.getAttribute("LOGIN");
            RelatorioAtividades relatorioAtividades = sessionBean.buscarRelatorioAtividades(loginEstagiario);
            request.setAttribute("relAtiv", relatorioAtividades);
            jsp = "/formularioRelatorioAtividades.jsp";
        } else if (request.getRequestURI().endsWith("/salvarFichaFrequencia")) {
            String loginEstagiario = (String) sessao.getAttribute("LOGIN");
            String referenteAoMes = request.getParameter("referenteAoMes");
            ArrayList<String> mat = new ArrayList<>();
            for (int i = 1; i <= 20; i++) {
                mat.add(request.getParameter("data" + String.valueOf(i)));
                mat.add(request.getParameter("horarioInicio" + String.valueOf(i)));
                mat.add(request.getParameter("horarioTermino" + String.valueOf(i)));
                mat.add(request.getParameter("atividades" + String.valueOf(i)));
            }
            String tabela = arrayToString(mat);
            sessionBean.novaFichaFrequencia(loginEstagiario, referenteAoMes, tabela);
            jsp = "/index.jsp";
        } else if (request.getRequestURI().endsWith("/cadastrarCurso")) {
            String nome = request.getParameter("nomeCurso");
            int porcentagem = Integer.parseInt(request.getParameter("porcentagem"));
            String login = (String) sessao.getAttribute("LOGIN");
            sessionBean.cadastrarCurso(login, nome, porcentagem);
            jsp = "/index.jsp";
        } else if (request.getRequestURI().endsWith("/visualisarEstagiario")) {
            String loginEstagiario = (String) sessao.getAttribute("LOGIN");
            Estagiario estagiario = sessionBean.buscarEstagiario(loginEstagiario);
            request.setAttribute("estagiario", estagiario);
            jsp = "/visualisarEstagiario.jsp";
        } else if (request.getRequestURI().endsWith("/gerarPlanoAtividades")) {
            Estagio estagio = null;
            if (request.getParameter("id") != null) {
                estagio = sessionBean.buscarEstagio(Long.parseLong(request.getParameter("id")));
            } else {
                String loginEstagiario = (String) sessao.getAttribute("LOGIN");
                estagio = sessionBean.buscarEstagio(loginEstagiario);
            }
            sessionBean.gerarPlanoAtividades(estagio);
            jsp = "/PlanoAtividades.pdf";
        } else if (request.getRequestURI().endsWith("/gerarTermoCompromisso")) {
            Estagio estagio = null;
            if (request.getParameter("id") != null) {
                estagio = sessionBean.buscarEstagio(Long.parseLong(request.getParameter("id")));
            } else {
                String loginEstagiario = (String) sessao.getAttribute("LOGIN");
                estagio = sessionBean.buscarEstagio(loginEstagiario);
            }
            sessionBean.gerarTermoCompromisso(estagio);
            if (estagio.isIsObrigatorio()) {
                jsp = "/TermoObrigatorio.pdf";
            } else {
                jsp = "/TermoNaoObrigatorio.pdf";
            }
        } else if (request.getRequestURI().endsWith("/gerarFichaFrequencia")) {
            Estagio estagio = null;
            if (request.getParameter("id") != null) {
                estagio = sessionBean.buscarEstagio(Long.parseLong(request.getParameter("id")));
            } else {
                String loginEstagiario = (String) sessao.getAttribute("LOGIN");
                estagio = sessionBean.buscarEstagio(loginEstagiario);
            }
            List<FichaFrequencia> fichaFrequencia = sessionBean.buscarFichaFrequencia(estagio.getId());
            sessionBean.gerarFichaFrequencia(fichaFrequencia.get(fichaFrequencia.size() - 1));
            jsp = "/FichaFrequencia.pdf";
        } else if (request.getRequestURI().endsWith("/gerarAvaliacao")) {
            String loginEstagiario = (String) sessao.getAttribute("LOGIN");
            String tipoAvaliacao = request.getParameter("tipo");
            Estagio estagio = sessionBean.buscarEstagio(loginEstagiario);
            if (tipoAvaliacao.equals("estagiario")) {
                sessionBean.gerarAvaliacao(true, estagio);
                jsp = "/AvaliacaoEstagiario.pdf";
            } else {
                sessionBean.gerarAvaliacao(false, estagio);
                jsp = "/AvaliacaoSupervisor.pdf";
            }
        } else if (request.getRequestURI().endsWith("/gerarRelatorioAtividades")) {
            String loginEstagiario = (String) sessao.getAttribute("LOGIN");
            Estagio estagio = sessionBean.buscarEstagio(loginEstagiario);
            sessionBean.gerarRelatorioAtividades(estagio);
            if (estagio.getRelatorioAtividades().isIsFinal()) {
                jsp = "/RelatorioAtividadesFinal.pdf";
            } else {
                jsp = "/RelatorioAtividadesParcial.pdf";
            }
        } else if (request.getRequestURI().endsWith("/listarEstagiosPorOrientador")) {
            String loginEstagiario = (String) sessao.getAttribute("LOGIN");
            Orientador orientador = sessionBean.buscarOrientador(loginEstagiario);
            List<Estagio> estagios = sessionBean.listarEstagiosPorOrientador(orientador.getId());
            request.setAttribute("estagios", estagios);
            jsp = "/listarEstagios.jsp";

        } else if (request.getRequestURI().endsWith("/gerenciarEstagiarios")) {
            String login = (String) sessao.getAttribute("LOGIN");
            Orientador orientador = sessionBean.buscarOrientador(login);
            List<Estagio> estagios = sessionBean.listarEstagiosPorOrientador(orientador.getId());
            request.setAttribute("estagios", estagios);
            jsp = "/gerenciarEstagiarios.jsp";

        } else if (request.getRequestURI().endsWith("/informacoesEstagiario")) {
            Estagio estagio = sessionBean.buscarEstagio(Long.parseLong(request.getParameter("id")));
            request.setAttribute("estagio", estagio);
            jsp = "/informacoesEstagiario.jsp";

        } else if (request.getRequestURI().endsWith("/listarEstagiosEsperandoAprovacao")) {
            String loginOrientador = (String) sessao.getAttribute("LOGIN");
            List<Estagio> estagios = sessionBean.listarEstagiosEsperandoAprovacao(loginOrientador);
            request.setAttribute("estagios", estagios);
            jsp = "/listarEstagiosEsperandoAprovacao.jsp";
        } else if (request.getRequestURI().endsWith("/alterarStatus")) {
            String situacao = request.getParameter("situacao");
            if (situacao.equals("Em Andamento")) {
                sessionBean.aprovarEstagio(Long.parseLong(request.getParameter("id")), "Em Andamento");
            } else {
                if (situacao.equals("Validado")) {
                    contadorEstagiosEmEspera--;
                    sessao.setAttribute("CONTADOR_ESTAGIOS_ESPERA", contadorEstagiosEmEspera);
                }
                sessionBean.updateStatusEstagio(Long.parseLong(request.getParameter("id")), situacao);
            }
            jsp = "/index.jsp";
        } else if (request.getRequestURI().endsWith("/listarAlertas")) {
            List<Alerta> alertas = sessionBean.listarAlertas();
            request.setAttribute("alertas", alertas);
            jsp = "/listarAlertas.jsp";
        } else if (request.getRequestURI().endsWith("/alterarSenha")) {
            String login = (String) sessao.getAttribute("LOGIN");
            String senhaAntiga = request.getParameter("senhaAntiga");
            String senhaNova = request.getParameter("senhaNova");
            String confirmarSenhaNova = request.getParameter("confirmarSenhaNova");
            String resultadoMudarSenha = sessionBean.alterarSenha(login, senhaAntiga, senhaNova, confirmarSenhaNova);
            if (resultadoMudarSenha.equals("alterado")) {
                request.setAttribute("msg", "Senha alterada com sucesso");
            } else if (resultadoMudarSenha.equals("senhaIncorreta")) {
                request.setAttribute("msg", "A senha antiga está incorreta");
            } else if (resultadoMudarSenha.equals("confirmacaoIncorreta")) {
                request.setAttribute("msg", "A nova senha e a confirmação são diferentes");
            }
            jsp = "/alterarSenha.jsp";
        } else if (request.getRequestURI().endsWith("/teste")) {
            jsp = "/index.jsp";
        } else if (request.getRequestURI().endsWith("/timerClient")) {
            request.setAttribute("msgErro", sessionBean.checkStatus() + "<br/>" + sessionBean.checkStatus() + "<br/>" + sessionBean.checkStatus());
            jsp = "/index.jsp";
        }
        if (jsp.endsWith(".pdf")) {
            response.sendRedirect(request.getContextPath() + "/files" + jsp);
        } else if (jsp == null) {
            response.sendRedirect(request.getContextPath() + "/index.jsp");
        } else if (!"empty".equals(jsp)) {
            request.getRequestDispatcher(jsp).forward(request, response);
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            try {
                processRequest(request, response);
            } catch (DocumentException ex) {
                Logger.getLogger(TesteServlet.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (ParseException ex) {
            Logger.getLogger(TesteServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
        String jsp = null;

    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            try {
                processRequest(request, response);
            } catch (DocumentException ex) {
                Logger.getLogger(TesteServlet.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (ParseException ex) {
            Logger.getLogger(TesteServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private Concedente salvarConcedente(HttpServletRequest request) {
        String nome = request.getParameter("nome");
        String pessoa = request.getParameter("pessoa");
        String documento = request.getParameter("documento");
        String rua = request.getParameter("rua");
        String nRua = request.getParameter("nRua");
        String bairro = request.getParameter("bairro");
        String cidade = request.getParameter("cidade");
        String uf = request.getParameter("uf");
        String cep = request.getParameter("cep");
        String telefone = request.getParameter("telefone");
        String fax = request.getParameter("fax");
        String email = request.getParameter("email");
        String representanteLegal = request.getParameter("representanteLegal");
        return new Concedente(nome, pessoa, documento, rua, nRua, bairro, cidade, uf, cep, telefone, fax, email, representanteLegal, false);
    }

    private Supervisor salvarSupervisor(HttpServletRequest request) {
        String nomeSupervisor = request.getParameter("nomeSupervisor");
        String telefoneSupervisor = request.getParameter("telefoneSupervisor");
        String faxSupervisor = request.getParameter("faxSupervisor");
        String emailSupervisor = request.getParameter("emailSupervisor");
        String cargoSupervisor = request.getParameter("cargo");
        String formacaoSupervisor = request.getParameter("formacao");
        String senhaSupervisor = emailSupervisor;
        String loginSupervisor = emailSupervisor;
        return new Supervisor(loginSupervisor, senhaSupervisor, nomeSupervisor, telefoneSupervisor, faxSupervisor, emailSupervisor, cargoSupervisor, formacaoSupervisor);
    }

    private String arrayToString(ArrayList<String> matriz) {
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < matriz.size(); i++) {
            result.append(matriz.get(i));
            result.append("@");
        }

        return result.toString();
    }
}
